Parse::RecDescent incrementally generates top-down recursive-descent
text parsers from simple yacc-like grammar specifications. It
provides:

- Regular expressions or literal strings as terminals (tokens)
- Multiple (non-contiguous) productions for any rule
- Repeated and optional subrules within productions
- Full access to Perl within actions specified as part of the grammar
- Simple automated error reporting during parser generation and
  parsing
- The ability to commit to, uncommit to, or reject particular
  productions during a parse
- The ability to pass data up and down the parse tree ("down" via
  subrule argument lists, "up" via subrule return values)
- Incremental extension of the parsing grammar (even during a parse)
- Precompilation of parser objects
- User-definable reduce-reduce conflict resolution via "scoring"
  of matching productions
